import { DataSource } from 'typeorm';
import * as marked from 'marked';

// 注意：在 NestJS 项目中，环境变量通常已经通过 @nestjs/config 加载
// 如果直接运行此脚本，请确保在项目根目录有 .env 文件

/**
 * 为所有没有 contentHtml 的文章生成 HTML
 * 运行方式: npx ts-node src/scripts/migrate-article-html.ts
 */
async function migrateArticleHtml() {
  // 配置 marked
  marked.setOptions({
    breaks: true,
    gfm: true,
  });

  // 创建数据库连接
  const dataSource = new DataSource({
    type: 'mysql',
    host: process.env.DB_HOST,
    port: Number(process.env.DB_PORT),
    username: process.env.DB_USERNAME,
    password: process.env.DB_PASSWORD,
    database: process.env.DB_DATABASE,
    timezone: '+08:00',
  });

  try {
    await dataSource.initialize();
    console.log('✅ 数据库连接成功');

    // 查询所有需要更新的文章
    const articles = await dataSource.query(
      'SELECT id, content, contentHtml FROM articles WHERE contentHtml IS NULL OR contentHtml = ""'
    );

    console.log(`📝 找到 ${articles.length} 篇需要更新的文章`);

    if (articles.length === 0) {
      console.log('✨ 所有文章都已有 HTML 内容，无需更新');
      return;
    }

    let updatedCount = 0;
    let errorCount = 0;

    for (const article of articles) {
      try {
        if (article.content) {
          // 将 Markdown 转换为 HTML
          const contentHtml = await marked.parse(article.content);
          
          // 更新数据库
          await dataSource.query(
            'UPDATE articles SET contentHtml = ? WHERE id = ?',
            [contentHtml, article.id]
          );
          
          updatedCount++;
          console.log(`✅ 文章 #${article.id} 更新成功`);
        } else {
          console.log(`⚠️  文章 #${article.id} 没有内容，跳过`);
        }
      } catch (error) {
        errorCount++;
        console.error(`❌ 文章 #${article.id} 更新失败:`, error.message);
      }
    }

    console.log('\n=== 迁移完成 ===');
    console.log(`✅ 成功更新: ${updatedCount} 篇`);
    console.log(`❌ 更新失败: ${errorCount} 篇`);
    console.log(`⏭️  跳过: ${articles.length - updatedCount - errorCount} 篇`);

  } catch (error) {
    console.error('❌ 迁移失败:', error);
    throw error;
  } finally {
    await dataSource.destroy();
    console.log('👋 数据库连接已关闭');
  }
}

// 运行迁移
migrateArticleHtml()
  .then(() => {
    console.log('🎉 迁移脚本执行完成');
    process.exit(0);
  })
  .catch((error) => {
    console.error('💥 迁移脚本执行失败:', error);
    process.exit(1);
  });

